package main

import (
	phandler "restapi/api/api_policy"
	vhandler "restapi/api/api_vsys"
	"restapi/config"
	"restapi/data"
	"restapi/logger"
	"restapi/module"
	"github.com/gin-gonic/gin"
	"github.com/sirupsen/logrus"
	"log"
	"io"
)

func main() {
	log.SetOutput(io.Discard)

	// 1. 加载配置
	config.MustLoad("")
	// 2. 初始化日志
	logger.Init(config.C.Log.Path, config.C.Log.Level)
	logrus.Infof("Loaded config: db=%s listen=%s", config.C.Database.Path, config.C.Listen)
	// 3. 初始化数据库
	if err := data.InitPolicyDB(config.C.Database.Path); err != nil {
		panic(err)
	}
	if err := data.InitVsysDB(config.C.Database.Path); err != nil {
		panic(err)
	}

	router := gin.Default()
	// 4. 注册路由
	router.POST(module.CREATE_POLICY_PATH, phandler.Create_Policy)
	router.DELETE(module.DELETE_POLICY_PATH, phandler.Delete_Policy)
	router.PUT(module.PUT_POLICY_PATH, phandler.Update_Policy)
	router.GET(module.GET_POLICY_PATH, phandler.List_Policy)
	router.GET(module.GET_MORE_POLICY_PATH, phandler.Get_Policy)

	router.POST(module.CREATE_VSYS_PATH, vhandler.Create_Vsys)
	router.DELETE(module.DELETE_VSYS_PATH, vhandler.Delete_Vsys)
	router.PUT(module.PUT_VSYS_PATH, vhandler.Update_Vsys)
	router.GET(module.GET_VSYS_PATH, vhandler.List_Vsys)
	router.GET(module.GET_MORE_VSYS_PATH, vhandler.Get_Vsys)

	// 5. 启动服务
	logrus.Infof("服务启动，监听端口 %s", config.C.Listen)
	if err := router.Run(config.C.Listen); err != nil {
		logrus.Fatalf("服务器启动失败: %v", err)
	}
}
